<?php
namespace api\helpers;

use Yii;
use yii\base\Component;
use yii\base\InvalidCallException;
use \Firebase\JWT\JWT as BaseJWT;

/**
 * JWT 生成工具
 */
class JWT extends Component
{

    /**
     * 定义jwt的key.
     * @var string jwt加盐字符串.
     */
    public static $key = 'TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ';
    
    /**
     * 定义失效时间
     * @var integer 接口调用凭证的超时时间 单位秒.
     */
    public static $expires_in = 86400 * 10;

    /**
     * 解析token.
     * 解析token并返回一个数组.
     * @param string $token 客户端返回的token.
     * @return array jwt 返回解码后的jwt.
     * @throws InvalidCallException 返回错误.
     */
    public static function decode($token)
    {
        try {
            return (array) BaseJWT::decode($token, self::$key, array('HS256'));
        } catch (\Exception $e) {
            $e->getMessage();
        }
    }

    /**
     * 获取token.
     * @param mixed $model 一个数据模型.
     * @return string 返回生成好的token.
     */
    public static function getToken($id, $tel)
    {
        $token = [
            "iss" => "http://lsqx.apiary.com.cn",
            "aud" => "http://www.apiary.com.cn",
            "iat" => time(),
            "exp" => time() + self::$expires_in, //失效时间
            'userid' => $id,
            'tel' => $tel,
        ];
        return BaseJWT::encode($token, self::$key);
    }

}
